/**
 * javascript性能优化
 * 1: 内存管理；
 * 2: 垃圾回收与常见GC算法；
 * 3: V8引擎的垃圾回收；
 * 4: Performance工具监控内容；
 * 5: 代码优化实例；
 * 
 * -------------------------------------
 * 内存管理
 * 内存：由可读写的单位组成，表示一片可操作空间
 * 管理：人为的去操作一片空间的申请、使用和释放
 * 内存管理：开发者主动申请空间，使用空间，释放空间
 * 管理流程：申请-使用-释放
 * 
 * -------------------------------------
 * 常见GC算法
 * 1: 引用计数
 * 2: 标记清除
 * 3: 标记整理
 * 4: 分代回收
 * 
 * ----------------------------
 * 可达对象
 * 在一个作用域链上，只要通过根可以有路径找到的对象都是可达对象
 * 
 * 
 * 
 * ----------------------------
 * 引用计数算法的优点
 * 1: 发现垃圾时立即回收
 * 2: 最大限度减少程序暂停
 * 
 * ----------------------------
 * 引用计数算法的缺点
 * 1: 无法回收循环引用的对象
 * 2: 时间开销大
 * 
 * ----------------------------
 * 标记清除算法实现原理
 * 标记和清除两个阶段
 * 1: 遍历所有对象，标记活动对象
 * 2: 遍历所有对象，清除所有未标记对象
 * 3: 回收相应空间
 * 
 * ----------------------------
 * 标记清除算法的优缺点
 * 缺点：空间碎片化；释放的空间片段不连续；
 * 
 * ----------------------------
 * 标记整理算法的实现原理（可以看作是标记清除算法的增强）
 * 1：遍历所有对象，标记活动对象
 * 2：整理，移动活动对象位置，使活动对象连续起来
 * 3：执行清除操作，清除掉所有未标记对象
 * 
 * ----------------------------
 * V8垃圾回收策略
 * 1: 采用分代回收的思想
 * 2: 内存分为新生代和老生代
 * 3：针对不同对象，采用不同算法
 * ----------------------------
 * V8将内存空间一分为2，小空间存放新生代对象（32M|16M）
 * 活动对象都在from
 * 标记整理将活动对象copy到To
 * From与To交换空间，完成空间释放
 * copy过程中，可能触发晋升操作，将新生代晋升至老生代
 * 一轮GC之后还存活的新生代需要晋升
 * To空间的使用率超过25% 需要晋升
 * 
 * 
 * 新生代: 空间复制算法 + 标记整理算法
 * 老生代: 标记清除 + 标记整理 + 增量标记
 * 
 * ----------------------------
 * 监控内存的几种方式
 * 堆快找查找分离dom
 * ----------------------------
 * 如何精准测试javascript性能
 * 本质上就是采集大量的执行样本进行数学统计和分析
 * 使用基于Benchmark.js的https://jsperf.com/完成 （不维护了）
 * 
 * -----------------------------
 * 选择最优的循环方法
 * forEach > for > for in
 * 
 * 优化节点添加
 * document.createDocumentFragment 缓存待增加节点
 * 
 * 克隆优化节点操作
 * 
 * 直接量替换new Object
 * 
 * -------------------------------
 * JSBench使用
 * 
 * 减少判断层级
 * 
 * 减少作用域链查找层级
 * 
 * 减少数据读取次数
 * 
 * 字面两与构造式
 * 
 * 减少循环体中的活动
 * 
 * 减少声明及语句数
 * 
 * 
 * 
 */

let obj = { name: 'Sara' }

let mine = obj

obj = null

console.log(mine)
console.log(obj)